package com.demo.java.OD301_350.OD334;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【支持优先级的队列】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146153661
 */
public class OdMain {
    // 定义任务类 Task，包含 data 和 priority
    static class Task implements Comparable<Task> {
        int data;      // 数据
        int priority;  // 优先级

        // 构造函数初始化任务数据和优先级
        public Task(int data, int priority) {
            this.data = data;
            this.priority = priority;
        }

        // 比较规则：优先级从高到低，优先级相同按数据的顺序
        @Override
        public int compareTo(Task o) {
            return Integer.compare(o.priority, this.priority);
        }

        // 重写 equals 方法，确保任务的数据和优先级完全相同才视为相同任务
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Task task = (Task) o;
            return data == task.data && priority == task.priority;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取输入数据
        String input = scanner.nextLine();
        scanner.close();

        // 处理输入数据并去掉括号
        String[] inputOperations = input.replaceAll("[()]", "").split(",");

        // 创建优先级队列
        PriorityQueue<Task> taskQueue = new PriorityQueue<>();

        // 遍历输入的数据，构建任务对象并加入队列
        for (int i = 0; i < inputOperations.length; i += 2) {
            int data = Integer.parseInt(inputOperations[i]);
            int priority = Integer.parseInt(inputOperations[i + 1]);
            taskQueue.offer(new Task(data, priority));  // 将任务加入优先级队列
        }

        // 存储结果
        List<Integer> resultList = new ArrayList<>();
        Task previousTask = null;

        // 处理队列中的任务
        while (!taskQueue.isEmpty()) {
            Task currentTask = taskQueue.poll();
            // 如果当前任务与前一个任务不相同，才加入结果
            if (previousTask == null || !currentTask.equals(previousTask)) {
                resultList.add(currentTask.data);
            }
            previousTask = currentTask;  // 更新前一个任务
        }

        // 输出结果
        String output = String.join(",", resultList.stream()
                .map(String::valueOf)
                .toArray(String[]::new));
        System.out.println(output);
    }
}